package rs.busadzije.bots;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.htmlparser.Node;
import org.htmlparser.Parser;
import org.htmlparser.Tag;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.filters.StringFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.OptionTag;
import org.htmlparser.tags.SelectTag;
import org.htmlparser.tags.TableColumn;
import org.htmlparser.tags.TableRow;
import org.htmlparser.tags.TableTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;

public class ZelezniceSrbije implements BotI {

	/**
	 * Mali test primer
	 * */
	public static void main(String[] args) {
		BotI t = new ZelezniceSrbije();
		String[][] rezultat = t.procitajPodatke();

		for (String[] strings : rezultat) {
			for (String string : strings) {
				System.out.print(string +", ");
			}
			System.out.println();
		}
	}

	/**
	 * Cita samo polaske iz Novog Sada
	 * */
	@Override
	public String[][] procitajPodatke() {

		String[][] rezultat = null;

		try {
			System.out.println("\n\tUcitavamo pocetnu stranicu...");
			Parser parser = new Parser("http://212.62.59.84:8080/Redvoznje/index.php");
			System.out.println("\n\tStranica ucitana!");
			//parsiramo stranicu
			NodeList nl = parser.parse(new HasAttributeFilter("name", "stanicaO"));
			Tag tag = (Tag) nl.elementAt(0);

			//izvlacimo gradove iz stranice
			SelectTag slGradovi = (SelectTag) tag;			
			System.out.println("Ukupno gradova: "+slGradovi.getChildCount());			
			OptionTag otGradovi[] = slGradovi.getOptionTags();
			String[] gradovi = new String[otGradovi.length];

			//zauzimamo potrebno mesto za rezultat
			rezultat = new String[gradovi.length][5];

			for (int i = 0; i < otGradovi.length; i++) {
				String grad = otGradovi[i].getValue();
				String gradNaziv = otGradovi[i].getChild(0).getText();
				//System.out.println(gradNaziv);

				String day,month,year;

				Calendar date = Calendar.getInstance();
				day = date.get(Calendar.DAY_OF_MONTH) +"";
				month = (date.get(Calendar.MONTH) + 1) +"";
				year = date.get(Calendar.YEAR) +"";
				System.out.println("\n\tDan: " + day + ", Mesec: " + month + ", Godina: " + year);

				//ucitavamo stranizu za polaske
				System.out.println("\n\tUcitavamo stranicu za grad: " + gradNaziv + "...");
				String htmlResource = Util.getHtmlFromPostMethod(
						"http://212.62.59.84:8080/Redvoznje/vozovinarelaciji.php",
						new String[]{"datumDan","datumMes","datumGod","stanicaO","stanicaD","Submit"},
						new String[]{day,month,year,"16808", grad + "","PRIKAI VOZOVE NA RELACIJI"} );


				parser = new Parser(htmlResource);
				System.out.println("\n\tStranica ucitana!");

				TableTag ttTabela = (TableTag) parser.parse(new TagNameFilter("table")).elementAt(1);

				System.out.println("\n\tBroj redova: " + ttTabela.getRowCount());
				if (ttTabela.getRowCount() == 0){
					//nemo poslaska za zadato mesto
					continue;
				}
					
				System.out.println(ttTabela.getRow(1).toHtml());
				
				//prolazimo kroz redove pocevsi od drugog, jer oni sadrze podatke
				for (int j = 1; j < ttTabela.getRowCount(); j++) {
					TableRow trRed = ttTabela.getRow(j);
					//ttTabela.get
					TableColumn[] tcKolone = trRed.getColumns();
					
					String brojVoza = tcKolone[0].getChild(0).toPlainTextString(); ;
					String vremePolaska = tcKolone[3].getChild(0).toPlainTextString();
					vremePolaska = vremePolaska.substring(0, 5);
					String trajanje = tcKolone[4].getChild(0).toPlainTextString(); ;
					
					//kilometraza nije data, ona ce biti jedinstvena u bazi, i nece se dobavljati sa svakog sajta posebno
					//String kilometraza = tcKolone[1].getChild(0).toPlainTextString(); ;
					
					//sada dobaljamo i cenu, nalazi se na drugoj stranici
					SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy.");
					
					String urlCena = "http://212.62.59.84:8080/Redvoznje/informacije.php?&id=2943&stP=" + "16808" 
						+"&stD=" + "16050" + "&datumOrkaCene=" +sdf.format(new Date()) + "&voz=" + brojVoza;
				
					Parser parserCena = new Parser(urlCena);
					Node nodeCena = parserCena.parse(new StringFilter(" din")).elementAt(0);
					if (nodeCena == null){
						//nekim vozovima cena nije dostupna
						continue;
					}
					String cena = nodeCena.getText().trim();
					cena = cena.replace(',', '.');
					int cenaIndex = cena.indexOf(" din");
					cena = cena.subSequence(0, cenaIndex ).toString();
					
					//String[] polazak = new String[]{"polazak",grad,vremePolaska,kilometraza,trajanje,brojVoza,linija,peron,cena};
					//rezultat[i] = polazak;
					System.out.println(vremePolaska + " , " + trajanje + " , " + brojVoza + " , " + cena);
				}
			}
			//novi red
			System.out.println();

		} catch (ParserException e) {
			e.printStackTrace();
		}
		
		return rezultat;
	}
	
}
